home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / dbg / sun4.md / dbg.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  8KB  |  306 lines

  1. /*
  2.  * dbg.h --
  3.  *
  4.  *     Exported types and procedure headers for the debugger module.
  5.  *
  6.  * Copyright 1989 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  *
  16.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/dbg/sun4.md/dbg.h,v 9.7 91/05/30 13:19:52 shirriff Exp $ SPRITE (Berkeley)
  17.  */
  18.  
  19. #ifndef _DBG
  20. #define _DBG
  21.  
  22. #ifndef _SPRITE
  23. #include <sprite.h>
  24. #endif
  25.  
  26. #ifdef KERNEL
  27. #include <mach.h>
  28. #include <user/netInet.h>
  29. #include <netTypes.h>
  30. #else
  31. #include <kernel/mach.h>
  32. #include <netInet.h>
  33. #endif
  34.  
  35. /*
  36.  * Variable to indicate that dbg wants a packet.
  37.  */
  38. extern    Boolean    dbg_UsingNetwork;
  39.  
  40. /*
  41.  * Variable to indicate if are using the rs232 debugger or the network debugger.
  42.  * On the sun4, we have only used the network.
  43.  */
  44. extern  Boolean dbg_Rs232Debug;
  45.  
  46. /*
  47.  * Variable that indicates that we are under control of the debugger.
  48.  */
  49. extern    Boolean    dbg_BeingDebugged;
  50.  
  51. /*
  52.  * Debugger using syslog to dump output of call command or not.
  53.  */
  54. extern    Boolean    dbg_UsingSyslog;
  55.  
  56. /*
  57.  * The different opcodes that kdbx can send us.
  58.  */
  59.  
  60. typedef enum {
  61.     DBG_READ_ALL_REGS,        /* Read all the  registers */
  62.     DBG_WRITE_REG,        /* Write one of the registers d0-d7 or a0-a7 */
  63.     DBG_CONTINUE,         /* Continue execution */
  64.     DBG_SINGLESTEP,        /* Single step execution */
  65.     DBG_DETACH,            /* The debugger has finished with the kernel */
  66.     DBG_INST_READ,        /* Read an instruction */
  67.     DBG_INST_WRITE,        /* Write an instruction */
  68.     DBG_DATA_READ,        /* Read data */
  69.     DBG_DATA_WRITE,        /* Write data */
  70.     DBG_SET_PID,        /* Set the process for which the stack
  71.                  * back trace is to be done. */
  72.     DBG_GET_STOP_INFO,        /* Get all info needed by dbx after it stops. */
  73.     DBG_GET_VERSION_STRING,    /* Return the version string. */
  74.     DBG_DIVERT_SYSLOG,        /* Divert syslog output to the console. */
  75.     DBG_REBOOT,            /* Call the reboot routine. */
  76.     DBG_BEGIN_CALL,        /* Start a call. */
  77.     DBG_END_CALL,         /* Clean up after a call completes. */
  78.     DBG_CALL_FUNCTION,        /* Call a function. */
  79.     DBG_GET_DUMP_BOUNDS,    /* Get the bounds for the dump program. */
  80.     DBG_UNKNOWN            /* Used for error checking */
  81. } Dbg_Opcode;
  82.  
  83. #define    DBG_OPCODE_NAMES {                    \
  84.     "Read all regs",                    \
  85.     "Write reg",                        \
  86.     "Continue",                        \
  87.     "Single Step",                        \
  88.     "Detach",                        \
  89.     "Inst Read",                        \
  90.     "Inst Write",                        \
  91.     "Data Read",                        \
  92.     "Data Write",                        \
  93.     "Process to walk stack for",                \
  94.     "Read information after stopped",            \
  95.     "Return version string",                \
  96.     "Divert syslog to the console",                \
  97.     "Reboot the machine",                    \
  98.     "Set up things to start a call command",        \
  99.     "Clean up things after a call command has executed",    \
  100.     "Call a function",                    \
  101.     "Get bounds for the dump program",            \
  102.     "UNKNOWN OPCODE"                    \
  103. }                                \
  104.  
  105.  
  106. typedef struct {
  107.     int    regNum;
  108.     int    regVal;
  109. } Dbg_WriteReg;
  110.  
  111. typedef struct {
  112.     int        address;
  113.     int        numBytes;
  114.     char    buffer[100];
  115. } Dbg_WriteMem;
  116.  
  117. typedef Dbg_WriteMem Dbg_CallFunc;
  118.  
  119. typedef struct {
  120.     int        address;
  121.     int        numBytes;
  122. } Dbg_ReadMem;
  123.  
  124. typedef struct {
  125.     int        stringLength;
  126.     char    string[100];
  127. } Dbg_Reboot;
  128.  
  129. typedef enum {
  130.     DBG_SYSLOG_TO_ORIG,
  131.     DBG_SYSLOG_TO_CONSOLE,
  132. } Dbg_SyslogCmd;
  133.  
  134. typedef struct {
  135.     unsigned int    pageSize;
  136.     unsigned int    stackSize;
  137.     unsigned int    kernelCodeStart;
  138.     unsigned int    kernelCodeSize;
  139.     unsigned int    kernelDataStart;
  140.     unsigned int    kernelDataSize;
  141.     unsigned int    kernelStacksStart;
  142.     unsigned int    kernelStacksSize;
  143.     unsigned int    fileCacheStart;
  144.     unsigned int    fileCacheSize;
  145. } Dbg_DumpBounds;
  146.  
  147. /*
  148.  * Message format.
  149.  */
  150. typedef struct {
  151.     int        opcode;
  152.     union {
  153.     int        pid;
  154.     Dbg_WriteReg    writeReg;
  155.     Dbg_WriteMem    writeMem;
  156.     Dbg_CallFunc    callFunc;
  157.     Dbg_ReadMem    readMem;
  158.     int        pc;
  159.     Dbg_SyslogCmd    syslogCmd;
  160.     Dbg_Reboot    reboot;
  161.     } data;
  162. } Dbg_Msg;
  163.  
  164. #define    DBG_MAX_REPLY_SIZE    1400
  165. #define    DBG_MAX_REQUEST_SIZE    1400
  166.  
  167. /*
  168.  * The UDP port number that the kernel and kdbx use to identify a packet as
  169.  * a debugging packet.  (composed from "uc": 0x75 = u, 0x63 = c)
  170.  */
  171.  
  172. #define DBG_UDP_PORT     0x7563
  173.  
  174. /*
  175.  * The different statuses that we send kgdb after we stop.
  176.  */
  177.  
  178. #define    DBG_RESET        0
  179. #define    DBG_INSTR_ACCESS    1
  180. #define    DBG_ILLEGAL_INSTR    2
  181. #define    DBG_PRIV_INSTR        3
  182. #define    DBG_FP_DISABLED        4
  183. #define    DBG_WINDOW_OVERFLOW    5
  184. #define    DBG_WINDOW_UNDERFLOW    6
  185. #define    DBG_MEM_ADDR_ALIGN    7
  186. #define    DBG_FP_EXCEP        8
  187. #define    DBG_DATA_ACCESS        9
  188. #define    DBG_TAG_OVERFLOW    10
  189. #define    DBG_UNKNOWN_TRAP11    11
  190. #define    DBG_UNKNOWN_TRAP12    12
  191. #define    DBG_UNKNOWN_TRAP13    13
  192. #define    DBG_UNKNOWN_TRAP14    14
  193. #define    DBG_UNKNOWN_TRAP15    15
  194.  
  195. #define    DBG_INTERRUPT        16
  196. #define    DBG_LEVEL1_INT        17
  197. #define    DBG_LEVEL2_INT        18
  198. #define    DBG_LEVEL3_INT        19
  199. #define    DBG_LEVEL4_INT        20
  200. #define    DBG_LEVEL5_INT        21
  201. #define    DBG_LEVEL6_INT        22
  202. #define    DBG_LEVEL7_INT        23
  203. #define    DBG_LEVEL8_INT        24
  204. #define    DBG_LEVEL9_INT        25
  205. #define    DBG_LEVEL10_INT        26
  206. #define    DBG_LEVEL11_INT        27
  207. #define    DBG_LEVEL12_INT        28
  208. #define    DBG_LEVEL13_INT        29
  209. #define    DBG_LEVEL14_INT        30
  210. #define    DBG_LEVEL15_INT        31
  211.  
  212. #define    DBG_BREAKPOINT_TRAP    32        /* ta 1 */
  213. #define    DBG_UNKNOWN_TRAP    33        /* Anything other trap. */
  214. #define    DBG_UNKNOWN_EXCEPT    34        /* Anything execption. */
  215.  
  216. /*
  217.  * Convert a sparc machine trap into a DBG trap.
  218.  */
  219. #define    DBG_CVT_MACH_TRAP(tn)    ( ((tn) < 32) ? (tn) : \
  220.     (( (tn) == 129) ? DBG_BREAKPOINT_TRAP : \
  221.         (((tn) > 128 ) ? DBG_UNKNOWN_TRAP : DBG_UNKNOWN_EXCEPT )))
  222.  
  223.  
  224.  
  225.  
  226. #define    DBG_EXECPTION_NAMES {        \
  227.     "Reset",                \
  228.     "Instruction Fault",        \
  229.     "Illegal Instruction Fault",    \
  230.     "Privilege Instruction Fault",    \
  231.     "FPU Disabled Fault",        \
  232.     "Window Overflow Fault",        \
  233.     "Window Underflow Fault",        \
  234.     "Memory Address Fault",        \
  235.     "FPU Exception Fault",        \
  236.     "Data Fault",            \
  237.     "Tag Overflow Trap",        \
  238.     "Unknown Trap 11",            \
  239.     "Unknown Trap 12",            \
  240.     "Unknown Trap 13",            \
  241.     "Unknown Trap 14",            \
  242.     "Unknown Trap 15",            \
  243.     "Interrupt Trap",            \
  244.     "D[1] Interrupt (level 1)",        \
  245.     "VMEbus 1 Interrupt (level 2)",    \
  246.     "VMEbus 2 Interrupt (level 3)",    \
  247.     "SCSI Interrupt (level 4)",        \
  248.     "VMEbus 3 Interrupt (level 5)",    \
  249.     "Ethernet Interrupt (level 6)",    \
  250.     "VMEbus 4 Interrupt (level 7)",    \
  251.     "Video Interrupt (level 8)",    \
  252.     "VMEbus 5 Interrupt (level 9)",    \
  253.     "Clock Interrupt (level 10)",    \
  254.     "VMEbus 6 Interrupt (level 11)",    \
  255.     "SCCs Interrupt (level 12)",    \
  256.     "VMEbus 7 Interrupt (level 13)",    \
  257.     "Clock Interrupt (level 14)",    \
  258.     "Memory Interrupt (level 15)",    \
  259.     "Breakpoint Trap",            \
  260.     "Unknown Trap",            \
  261.     "UNKNOWN EXCEPTION"            \
  262. }                    \
  263.  
  264. /*
  265.  * Variable that is set to true when we are called through the DBG_CALL macro.
  266.  */
  267. extern    Boolean    dbgPanic;
  268.  
  269. /*
  270.  * Macro to call the debugger from kernel code.
  271.  */
  272. #define DBG_CALL    dbgPanic = TRUE; asm("ta 1");
  273.  
  274.  
  275. /*
  276.  * Info returned when GETSTOPINFO command is submitted.
  277.  */
  278. typedef struct {
  279.     int            codeStart;
  280.     int            trapType;
  281.     Mach_RegState    regs;
  282. } StopInfo;
  283.  
  284. #ifdef KERNEL
  285. extern    void    Dbg_Init _ARGS_((void));
  286. extern    void    Dbg_InputPacket _ARGS_((Net_Interface *interPtr,
  287.                 Address packetPtr, int packetLength));
  288. extern    Boolean    Dbg_InRange _ARGS_((unsigned int addr, int numBytes,
  289.                     Boolean writeable));
  290. extern    void    Dbg_Main _ARGS_((int trapType, Mach_RegState *trapStatePtr));
  291. extern int Dbg_PacketHdrSize _ARGS_((void));
  292. extern Boolean
  293.     Dbg_ValidatePacket _ARGS_((int size, Net_IPHeader *ipPtr, int *lenPtr,
  294.                    Address *dataPtrPtr,
  295.                    Net_InetAddress *destIPAddrPtr,
  296.                    Net_InetAddress *srcIPAddrPtr,
  297.                    unsigned int *srcPortPtr));
  298. extern void
  299.     Dbg_FormatPacket _ARGS_((Net_InetAddress srcIPAddress,
  300.                  Net_InetAddress destIPAddress,
  301.                  unsigned int destPort, int dataSize,
  302.                  Address dataPtr));
  303. extern int    Dbg_PacketHdrSize _ARGS_((void));
  304. #endif
  305. #endif /* _DBG */
  306.